
#pragma once
/**
 * @brief    查询模型数据， 考虑和
 * 
 * @version  0.1
 * @author   wanghuan
 * @date     2025.02.22
 *         _
 *     ___| |__   ___ _ __   __ _  ___  _ __   __ _
 *    / __| '_ \ / _ \ '_ \ / _` |/ _ \| '_ \ / _` |
 *    \__ \ | | |  __/ | | | (_| | (_) | | | | (_| |
 *    |___/_| |_|\___|_| |_|\__, |\___/|_| |_|\__, |
 *                          |___/             |___/
 * @copyright (c) 2025 by 神工仿真, All Rights Reserved.
 */
#include "Utility/Algebra/Point.h"

#include "DataStructure/Common/Id.h"
#include "DataStructure/Input/Node/NodeData.h"
#include "DBManager/IService/Input/Node/INodeService.h"

#include "SGFem/Pre/Common/PreExport.h"

SG_NAMESPACE_OPEN
namespace FEMSolver
{
    /**
     * @brief    获取模型数据，相关数据的查询依赖Pre模块进行排序
     * 
     * @author   wanghuan
     * @date     2025.02.22
     */
    class Pre_DECLSPEC ModelInfoQuery
    {
        public:
          /**
           * @brief    获取节点数据
           *
           * @param    nodeRepository 节点数据仓库
           * @param    nodeIdSet      节点编号，使用指针可以兼容 vector和 数组Array
           * @param    nNode          节点数量
           * @param[out]    points        节点的basic 坐标系下坐标值
           * @param[out]     nodeIndexes    节点对应的索引编号， 可以方便查询节点对应的全局自由度编号
           * @param[out]     dispCoordIds   节点对应的位移输出坐标系
           * @author   wanghuan
           * @date     2025.02.22
           */
          static void QueryNode (const std::shared_ptr<SG::DBManager::INodeService>& nodeRepository,
                                 const SG::DataStructure::Common::Id* const          nodeIdSet,
                                 const int                                           nNode,
                                 SG::Algebra::PointArray& _OUT                       points,
                                 std::vector<std::size_t>& _OUT                      nodeIndexes,
                                 std::vector<SG::DataStructure::Common::Id>& _OUT    dispCoordIds);
    };

};  // end namespace FEMSolver
SG_NAMESPACE_CLOSE